/*
 * SessionManager.h
 * 
 * 会话管理器 - 管理所有活跃的会话
 */

#pragma once

#include "network/Session.h"
#include <muduo/base/noncopyable.h>
#include <muduo/net/TcpConnection.h>

#include <map>
#include <mutex>
#include <functional>

namespace framework {

/**
 * @brief 会话管理器
 * 
 * 职责：
 * 1. 管理所有活跃会话
 * 2. 提供会话查询接口
 * 3. 处理会话的创建和销毁
 */
class SessionManager : muduo::noncopyable {
public:
    SessionManager() = default;
    ~SessionManager() = default;
    
    /**
     * @brief 添加会话
     * @return 返回创建的 Session 智能指针
     */
    SessionPtr addSession(const muduo::net::TcpConnectionPtr& conn);
    
    /**
     * @brief 移除会话
     */
    void removeSession(uint64_t sessionId);
    
    /**
     * @brief 根据 sessionId 查找会话
     */
    SessionPtr getSession(uint64_t sessionId);
    
    /**
     * @brief 根据 TcpConnection 查找会话
     */
    SessionPtr getSessionByConn(const muduo::net::TcpConnectionPtr& conn);
    
    /**
     * @brief 获取当前会话数量
     */
    size_t size() const;
    
    /**
     * @brief 清空所有会话
     */
    void clear();
    
    /**
     * @brief 遍历所有会话
     */
    void foreach(const std::function<void(const SessionPtr&)>& func);
    
private:
    mutable std::mutex mutex_;
    std::map<uint64_t, SessionPtr> sessions_;  // sessionId -> Session
    std::map<std::string, uint64_t> connToSession_;  // conn name -> sessionId
};

} // namespace framework

